关于protobuf的json处理

就打了那么久go代码了,一般需要处理json的时候一般都是Json Marshal Unmarshal一刷子搞定,但这次遇到了一个坑,那就是marshal into interface{}

对于处理marshal into interface{}问题我之前都是使用jsoniter这个库来解决的,一般来说都能用,但这次是通过protobuf生成的文件,因为流表许多不同的结构,导致了protoc文件在同一字段使用了大量oneof来处理。也就导致了我们生成了一个看似interface而又有具体类型的结构。

主要解决还是这个的Marshal form []byte问题。其实解决方法很简单。

1
go get 	github.com/golang/protobuf/proto

用这个包来处理proto的二进制转换以及json转换就好了。

1
2
3
4
5
6
7

func example(){
var data []byte
protocMessage.Marshal(&data)
json.Unmarsahl(data,&protocMessage)// err: can not marsahl into interface{}
proto.Unmarshal(data, &protocMessage) // success
}

这个包是专门来处理 protobuf的转换问题的,都是没看官方文档惹的祸(